package com.imooc.highter_order_function

object HigherOrderApp extends App {

  val l = List(1,2,3,4,5)

  //map: 逐个去操作集合中的每个元素
  //map的作用就是将 容器中的每一个 元素 都作用一个函数
  l.map((x:Int) => x + 1)
  l.map(x => x * 2)
  l.map(_ * 2 ).foreach(print)
  println()
  //filter
  l.map(_ * 2).filter( _ > 8 ).foreach(print)
  println()
  //take
  println(l.take(2))
  //reduce
  l.reduce(_+_)
  println(l.reduceLeft(_-_))
  //结果为-4 原因是 reduce 中的操作 是以 两两元素 为工作进行的
  //也就是8-7=1 6-5=1 4-3=1 2-1=1
  println(l.reduceRight(_-_))

  println(s" fold " + l.fold(15)(_+_))
  println(l.fold(14)(_-_))

  //240 curry的第一个参数作为初始值 curry的第二个参数作为计算值 当第二个参数计算完成之后，
  //将第二个参数的计算结果 同第一个计算结果 再次 进行计算 运算符 与 curry的第二个参数相同
  println(l.foldLeft(2)(_*_))
  //3
  println(l.foldRight(4)(_+_))

  println(l.max)
  println(l.min)
  println(l.sum)

  val f = List(List(1,2),List(3,4),List(5,6))

  f.flatten

  f.map(_.map(_*2))
  //flatMap == 先 flat 然后在 map
  f.flatMap(_.map(_ * 2))


  val txt = scala.io.Source.fromFile("/home/lynn/桌面/scala/scala_note.txt").mkString

  val ls = List(txt)
  ls.flatMap(_.split("\n")).map(word=> (word,1)).foreach(println)

}
